package IO;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * @ClassName : SystemInDemo
 * @Author : LV88VL
 * @Date: 2021/3/16 10:57
 * @Description : 转换流=============================重点==================
 *              是一种字符流，只能实现字节流读写文本数据的时候，通过转换流来使用字符的
 *              高效流的方法，而不能实现图片、音频的等数据的读写
 *              BufferedReader类从字符输入流中读取文本并缓冲字符，以便有效地读取字符，数组和行
 *                ********************************************
 *              需求：在获取键盘输入的一系列字符
 *                ********************************************
 *              InputStreamReader：理解上是字节流通向字符的桥梁，使用上也是
 *                      //通过InputStreamReader()将字节流包装成字符流
 *                      BufferedReader br = new BufferedReader(new InputStreamReader (System.in));
 *
 *              OutputStreamWriter:理解上是字符流通向字节流的桥梁，使用上还是通过
 *                                                      字节流转换成字符流。
 *                       BufferedWriter bw = new  BufferedWriter(new OutputStream(System.out));
 *
 */
public class SystemInDemo {
    public static void main(String[] args) throws IOException {
        //读取键盘录入的字节输入流
        InputStream in = System.in;
        //通过InputStreamReader将字节流转化为字符流
        InputStreamReader isr = new InputStreamReader(in);
        //对字符流进行效率的提高，而且使用字符对象流特有方法readLine()；
        /**readLine()：用于读取一行数据，直到遇到“\n”或者“\r”才会结束
            误以为readLine()是读取到没有数据时就返回null
            (因为其它read方法当读到没有数据时返回-1)，
            而实际上readLine()是一个阻塞函数，当没有数据读取时，
            就一直会阻塞在那，而不是返回null。
            没有数据时会阻塞，在数据流异常或断开时才会返回null*/
        BufferedReader br = new BufferedReader(isr);
        String line =null;
        while((line=br.readLine())!=null){//键盘录入必须定义结束标记
            if ("over".equals(line)) {
                break;
            }
            System.out.println(line);
        }
    }
}
